package com.heima.collectionAndMap.collection.set;

import com.heima.collectionAndMap.collection.set.pojo.Student;

import java.util.HashSet;

public class HashSetDemo {
    public static void main(String[] args) {
        /**
         * 哈希值: 对象的整数表现形式, int型
         * 1. 如果没有重写hashCode方法, 不同对象计算出的哈希值是不同的, 默认根据地址值计算
         * 2. 如果已经重写hashCode方法, 不同的对象只要属性值相同, 计算出的哈希值就是一样的
         * 3. 但是在小部分情况下, 不同的属性值或者不同的地址值计算出来的哈希值也有可能一样(哈希碰撞)
         */

        // 1. 创建对象
        Student stu1 = new Student("cen", 20);
        Student stu2 = new Student("cen", 20);

        // 2. 哈希值
        System.out.println(stu1.hashCode());
        System.out.println(stu2.hashCode());


        /**
         * 创建一个存储学生对象的集合, 并根据对象的成员变量值去重
         * 自定义对象需要重写hashCode和equals
         */
        HashSet<Student> set = new HashSet<>();
        set.add(stu1);
        set.add(stu2); // false
        System.out.println(set);
    }
}
